package ar.edu.utn.frgp.labtec.actions.ordentrabajo;

import ar.edu.utn.frgp.labtec.constants.ServiceNameConstants;
import ar.edu.utn.frgp.labtec.entities.Cliente;
import ar.edu.utn.frgp.labtec.entities.EstadoEnum;
import ar.edu.utn.frgp.labtec.entities.Laboratorio;
import ar.edu.utn.frgp.labtec.entities.OrdenDeTrabajo;
import ar.edu.utn.frgp.labtec.service.GestionLaboratorioService;
import ar.edu.utn.frgp.labtec.service.GestionOrdenTrabajoService;



@SuppressWarnings("serial")
public class GuardarOrdenTrabajoAction extends OrdenTrabajoAction  {
	
	public String execute(){
		OrdenDeTrabajo orden;
		GestionOrdenTrabajoService gestionOrden = (GestionOrdenTrabajoService) getContext().getBean(ServiceNameConstants.GESTION_ORDEN_TRABAJO_SERVICE);
		
		orden = createObjOrden();
		if(idOrden == null){
			gestionOrden.crearOrdenDeTrabajo(orden);
		}else
			gestionOrden.updateOrdenDeTrabajo(orden);
		
		return SUCCESS;
	}
	
	private OrdenDeTrabajo createObjOrden(){
		OrdenDeTrabajo orden = new OrdenDeTrabajo();
		
		orden.setIdOrden(idOrden);
		orden.setAnioOrden(anioOrden);
		orden.setCodDepto(departamento);
		orden.setCodLab(laboratorio);
		orden.setLaboratorio(getLaboratorioObj());
		orden.setDepartamento(orden.getLaboratorio().getDepartamento());
		
		Cliente cliente = new Cliente();
		cliente.setCodCliente(codCliente);
		orden.setCliente(cliente);
		
		orden.setNumeroCuenta(numeroCuenta);
		orden.setMontoTotal(montoTotal);
		orden.setPlazoEntrega(plazoEntrega);
		orden.setDistribucionProducidos(distribucionProducidos);
		orden.setFormaPago(formaPago);
		orden.setObservaciones(observaciones);
		if(estado.equals(EstadoEnum.H.getCodigo()))
			orden.setEstado(EstadoEnum.H);
		else
			orden.setEstado(EstadoEnum.I);
		return orden;
	}
	
	private Laboratorio getLaboratorioObj(){
		if(laboratorio != null){
			GestionLaboratorioService laboratorioService = (GestionLaboratorioService) getContext().
				getBean(ServiceNameConstants.GESTION_LABORATORIO_SERVICE);
			
			Laboratorio laboratorioObj = laboratorioService.getLaboratorio(laboratorio, departamento);
			return laboratorioObj;
		}else
			return null;
	}
}